package robren.domain;

import java.util.List;

import robren.data.ICursoStoreDAO;
import robren.data.IInscripcionDAO;
import robren.data.IPagoDAO;
import robren.data.ISolicitanteDAO;
import robren.data.ISubvencionDAO;
import robren.data.IUserDAO;
import robren.data.JDBCCursoStoreDAO;
import robren.data.JDBCInscripcionDAO;
import robren.data.JDBCPagoDAO;
import robren.data.JDBCSolicitanteDAO;
import robren.data.JDBCSubvencionDAO;
import robren.data.JDBCUserDAO;
import robren.utils.UIDGenerator;

public class SolicitanteManager {
	
	private IPagoDAO idao = new JDBCPagoDAO();
	private ISubvencionDAO isub = new JDBCSubvencionDAO();
	private ISolicitanteDAO isol = new JDBCSolicitanteDAO();
	private IInscripcionDAO iIns = new JDBCInscripcionDAO();
	private ICursoStoreDAO iCur = new JDBCCursoStoreDAO();
	private IUserDAO ius = new JDBCUserDAO();
	
	public List<Subvencion> listarSubvenciones (String id){
		List<Subvencion> subvenciones = isub.selectSubvencionDisponible(id);
		return subvenciones;	
	}
	
	public Pago realizarPago (Subvencion sub,String id,String id_curso,String OIDInscripcion){
		Pago pago = new Pago();
		Solicitante sol = ius.selectSolicitante(id);
		String oidsol = isol.selectOidSolicitante(id);
		String oidcur = iCur.selectOidCurso(id_curso);
		pago.setInscripcion(iIns.selectInscripcion(oidsol, oidcur));
		pago.setReferencia(pago.getInscripcion().getReferencia());
		Curso c = iCur.selectCurso(id_curso);
		pago.setPrecio(c.getPrecio());
		Integer puntos = sol.getPuntos() -sub.getPuntos();
		isol.updatePuntos(id,puntos);
		idao.insertaPrecio(pago.getPrecio()-sub.getTipo(),OIDInscripcion);
		pago.setPrecio(pago.getPrecio()-sub.getTipo());
		return pago;
	}
	
	public Pago realizarPagoSinSubvencion(String id,String id_curso,String OIDInscripcion){
		Pago pago = new Pago();
		String oidsol = isol.selectOidSolicitante(id);
		String oidcur = iCur.selectOidCurso(id_curso);
		pago.setInscripcion(iIns.selectInscripcion(oidsol, oidcur));
		pago.setReferencia(pago.getInscripcion().getReferencia());
		Curso c = iCur.selectCurso(id_curso);
		pago.setPrecio(c.getPrecio());
		idao.insertaPrecio(pago.getPrecio(),OIDInscripcion);
		return pago;
	}
	public List<Curso> recomendarCursos(String id){
		return iCur.selectCursosRecomendados(id);
	}
	public Boolean existeNick(String nick){
		boolean res = false;
		if(selectId(nick)!=null)
			res = true;
		return res;
	}
	public String selectId(String nick){
		return isol.selectId(nick);
	}
	public Solicitante obtenerSolicitante(String nick){
		String id_sol = selectId(nick);
		return ius.selectSolicitante(id_sol);
	}
	public Solicitante obtenerSolicitantePorID(String id){
		return ius.selectSolicitante(id);
	}
	
	public Subvencion selectSubvencion(String id){
		return isub.selectSubvencion(id);
	}
}
